/**
 * Created by Administrator on 2017/5/3.
 */
let Client = require('leopard-api-client');
// const client = new Client('http://192.168.4.201:3005' + '/api');
const client = new Client('http://192.168.4.35:3005' + '/api');
// const client = new Client('http://192.168.4.35:3100' + '/api');
// const client = new Client('http://localhost:3005/api');
const randomString = require('randomstring');
let moment = require('moment');
const PromiseA = require('bluebird');
const originData = require('./data');

const _ = require('lodash');
const constctor = require('./constrctor');

const users = [{
    "username": "admin",
    "password": "mmp0ss"
}, {
    "username": "zengsh",
    "password": "111111"
}, {
    "username": "liupeng",
    "password": "111111"
}, {
    "username": "yuwei",
    "password": "111111"
}];

const mon = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
// // 7 31
// client.account.login(users[0]).then(res => {
//     client.authenticate(res.id);
//     // return constctor.createPlans(client);
//     return client.department.findOne({
//         filter: {
//             where: {name: "运营部"},
//             include: "departmentMembers"
//         }
//     }).then((department) => {
//         if (!department) console.log(123);
//         const members = department.departmentMembers;
//         return PromiseA.mapSeries(members, member => {
//             // 天  ===========
//             return client.account.calculateWholeMonthCommission(member.id, {
//                 filter: {
//                     where: {
//                         date: {
//                             between: [moment().startOf('day').subtract(4, 'day'),
//                                 moment()]
//                         }
//                     }
//                 }
//             }).then((res) => {
//                 console.log(res);
//                 return;
//             })
//             // 月 ==========
//             // return client.account.calculateWholeMonthCommission(member.id, {
//             //     filter: {
//             //         where: {
//             //             date: {
//             //                 between: [moment().startOf('month').subtract(1, 'month'),
//             //                     moment().endOf('month').subtract(1, 'month')]
//             //             }
//             //         }
//             //     }
//             // }).then((res) => {
//             //     console.log(res);
//             //     return;
//             // })
//         });
//     });
// });


// 触发运营提成
// const mon = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
// client.account.login(users[0]).then(res => {
//     client.authenticate(res.id);
//     return PromiseA.mapSeries(mon, m => {
//         client.group.find({filter: {where: {departmentId: 'c2307910-95d8-11e6-b22a-b9a1ce20a60e'}}}).then((groups) => {
//             console.log(_.map(groups, 'name'));
//             return PromiseA.mapSeries(groups, group => {
//                 return client.account.find({filter: {where: {groupId: group.id, enabled: true}}}).then(accounts => {
//                     accounts = _.compact(accounts.map(a => {
//                         if (a.enabled === false)
//                             return;
//                         return a;
//                     }));
//                     return PromiseA.mapSeries(accounts, account => {
//                         console.log(account.fullname);
//                         const date = moment().subtract(m, 'month').toDate();
//                         return client.account.calculateWholeMonthCommission(account.id, {date});
//                     });
//                 });
//             });
//         });
//     });
// });

// 统计
// client.account.login(users[2]).then(res => {
//     client.authenticate(res.id);
//     const data = [{
//         joins: [{
//             source: 'group',
//             sourceField: 'id',
//             target: 'CustomerRecharge',
//             targetField: 'groupId'
//         }],
//         filter: [{
//             method: 'find',
//             filter: {where: {isDelete: false, departmentId: 'dc097980-9b56-11e6-bea5-6b7423f0508a'}},
//             model: 'group'
//         }, {
//             method: 'aggregate',
//             model: 'CustomerRecharge',
//             filter: {
//                 where: {
//                     and: [{status: {inq: ['handle', "unhandled"]}},
//                         {createdAt: {gte: moment().startOf('month').subtract(2, 'year').toDate()}}, {createdAt: {lte: moment().endOf('month').toDate()}}]
//                 },
//                 aggregate: {
//                     $group: {
//                         'id': {
//                             groupId: '$groupId',
//                             year: {$year: "$createdAt"},
//                             month: {$month: "$createdAt"}
//                         },
//                         'amount_sum': {
//                             '$avg': '$amount'
//                         }
//                     }
//                 },
//             }
//         }]
//     }];
//     return client.common.aggregate({data, isRole: false}).then(([datas]) => {
//         datas.forEach((data) => {
//             console.log(data.name, data.customerRecharge.amount_sum);
//         });
//     });
// });
// c2307910-95d8-11e6-b22a-b9a1ce20a60e


// // });


// 创建销售计划
//     const filter = {
//         model: 'customerRecharge',
//         include: 'customer',
//         relations: [{model: 'customer'},
//             {field: 'name'},
//             {value: ['1']},
//             {relationField: 'customerId'}
//         ]
//     };
//
//     client.common.search({filter}).then(({data}) => {
//         console.log(data.length);
//         data.map(r => {
//             console.log(r.status);
//         })
//     });
// });
// return constctor.createPlans(client);
//
//     let cc = 0;
// // 创建
//     status = ['unhandled', 'close']
//     const sellerId = '0186ce30-9399-11e6-bcef-bd6c178a3605';
//     client.authenticate(oauth.admin.id);
//     return PromiseA.mapSeries(originData.customers, customer => {
//         const data = _.assign({}, customer, {
//             name: customer.name + (cc++),
//             sellerId: sellerId,
//             rebate: Math.floor(Math.random() * 100 % 80)
//         });
//         // 创建客户
//         return client.customer.create({data}).then(customer => {
//             // 为客户创建银行卡
//             const data = {
//                 bankAccount: '622700332537011083' + cc,
//                 customerId: customer.id,
//                 owner: randomString.generate(5),
//                 phone: '137' + randomString.generate({
//                     length: 9,
//                     charset: 'numeric'
//                 }),
//             };
//             return client.customerBankAccount.create({data}).then((bankAccount) => {
//                 const amount = Math.floor(Math.random() * 100000 % 100000) || 10000;
//                 const data = _.assign({}, originData.customerRecharge, {
//                     status: status[cc % 2],
//                     amount: amount,
//                     sponsorId: accounts[Math.floor(Math.random() * 10) % (accounts.length)],
//                     rebate: Math.floor(Math.random() * 100 % 50),
//                     customerBankAccountId: bankAccount.id,
//                     customerId: customer.id
//                 });
//                 return client.customerRecharge.create({data});
//             });
//         });
//
//     });
// });
// const filter = {
//     "where": {
//         "type": "income",
//        // createdAt:{between:[moment().startOf('month').toDate(),moment().toDate()]} // 这个月
//         createdAt:{between:[moment().startOf('month').subtract(2,'month').toDate(),moment().startOf('month').subtract(1,'month').toDate()]} //4月到5月
//     },
//     "aggregate": {
//         $group: {
//             'id': '$departmentId',
//             'amount_sum': {
//                 '$sum': '$amount'
//             }
//         }
//     },
//     // "sort": "date DESC",
//     // "limit": 5,
//     // "skip": 20,
//     // "fields": {
//     //     "external": false
//     // }
// };


// const filter = {
//     model: 'CustomerIncomeExpenditure',
//     who: 'sponserId',
//     amountFiled: 'account',
//     latitude: 'day',
//     extractWhere: {
//         "type": "income"
//     },
//     whereFields: ['new', 'renewal'],
//     beginDate: moment().startOf('month').toDate(),
//     endDate: moment().toDate(),
//     dateField: 'createdAt'
// };
// const data = [];
// for (let i = 0; i < 5; i++) {
//     data.push({
//         joins: [{
//             source: 'department',
//             sourceField: 'id',
//             target: 'CustomerRecharge',
//             targetField: 'departmentId'
//         }],
//         filter: [{
//             method: 'find',
//             filter: {where: {isDelete: false}},
//             model: 'department'
//         }, {
//             method: 'aggregate',
//             model: 'CustomerRecharge',
//             filter: {
//                 where: {
//                     "type": "new",
//                     "status": "handle",
//                     departmentId: 'dc097980-9b56-11e6-bea5-6b7423f0508a',
//                     createdAt: {
//                         between: [moment().startOf('month').subtract(i, 'month').toDate(),
//                             moment().startOf('month').subtract(i, 'month').add(1, 'month').toDate()]
//                     } // 这个月
//                 },
//                 aggregate: {
//                     $group: {
//                         'id': {
//                             departmentId: '$departmentId',
//                             year: {$year: "$createdAt"},
//                             month: {$month: "$createdAt"}
//                         },
//                         'amount_sum': {
//                             '$sum': '$amount'
//                         }
//                     }
//                 },
//             }
//         }]
//     });
// }


// client.operationDaily.find({
//     filter: {
//         where: {
//             accountId: "H1832uHZZ",
//             weiboId: "B19fyJiRWZ",
//             date: {"where":{"accountId":"H1832uHZZ","weiboId":"B19fyJiRWZ","date":{"between":["2017-06-01T16:00:00.000Z","2017-06-02T16:00:00.000Z"]},"customerId":"BySAARqAWZ"}}
//         }
//     }
// }).then(s => {
//     console.log(s);
// });
// constctor.getDepartmentAggregate(client);
// constctor.getSellerAggregate(client);
// constctor.getGroupAggregate(client);
// })


///111111111111
// client.account.login(users[0]).then(res => {
//     let oauth = {admin: res};
//     client.authenticate(oauth.admin.id);
// // constctor.getDepartmentAggregate(client);
// // constctor.getSellerAggregate(client);
// // constctor.getGroupAggregate(client);
// // });
// // //     // 创建销售计划
// //     return constctor.createPlans(client);
//     const accounts = ['0b7b4a10-9b5a-11e6-bea5-6b7423f0508a',
//         '172dc910-9b59-11e6-bea5-6b7423f0508a',
//         '1cd26050-9b5a-11e6-bea5-6b7423f0508a',
//         '26988330-9b5a-11e6-bea5-6b7423f0508a',
//         '319ea020-9b5a-11e6-bea5-6b7423f0508a',
//         '34995f00-9b59-11e6-bea5-6b7423f0508a'];
// // 创建recharge
//     return constctor.createCustomerRecharge(client, accounts).then(recharges => {
//         console.log(recharges);
//         // 对这个申请做处理 财务确认
//         // TODO 制造点关闭
//         return PromiseA.mapSeries(recharges, recharge => {
//             return constctor.updateCustomerRecharge(client, recharge.id);
//         });
//     });
// });
//
// client.account.login(users[3]).then(res => {
//     // 发起一次微博充值
//     client.authenticate(res.id);
//     // // 创建一个微博申请
//     // return constctor.creeateWeiboRecharge(client, res.userId).then((weiboRecharge) => {
//     //     // return ;
//     //     // 会计审核
//     //     // 第一次确认 BkPmwK9ZeZ
//     //     return client.weiboRecharge.handle(weiboRecharge.id, {data: {status: 'handle', remarks: '合适确认说明'}});
//     // });
//     // 创建消耗
//     return constctor.createMaterials(client, res.userId);
// });


//     .then(() => {
//     client.authenticate(oauth.operator.id);
//     // 微博消耗
//     return constctor.createMaterials(client, oauth.operator.userId);
// }).then(() => {
//     client.authenticate(oauth.operator.id);
//     // 创建销售计划
//     return constctor.createPlans(client);
// });

// client.account.login(users[0]).then(res => {
//     let oauth = {admin: res};
//     client.authenticate(oauth.admin.id);
//     // 清除所有数据
//    // return client.common.deleteAllModel().then(() => {
//         // 创建部门=>组
//         return constctor.createDepartment(client, oauth.admin.userId).then(() => {
//             return constctor.createGroup(client, oauth.admin.userId);
//         }).then(() => {
//             return constctor.createMembers(client).then(users => {
//             }); //为组创建用户 属于哪一个组？
//         }).then(() => {
//             return constctor.createCustomerForUser(client); // 为用户创建客户==》为客户创建微博
//         }).then(() => {
//             return constctor.createBankAccounts(client); //创建银行卡
//         }).then(() => {
//             return client.account.login(users[1]).then(res => {
//                 return oauth.seller = res; // 销售人员
//             }).then(() => {
//                 return client.account.login(users[2]).then(res => {
//                     return oauth.operator = res; // 运营人员
//                 });
//             });
//         }).then(() => {
//             // 发起一次客户充值
//             client.authenticate(oauth.seller.id);
//             return constctor.createCustomerRecharge(client, oauth.seller.userId).then(recharges => {
//                 // 对这个申请做处理 财务确认
//                 // TODO 制造点关闭
//                 return PromiseA.mapSeries(recharges, recharge => {
//                     return constctor.updateCustomerRecharge(client, recharge.id);
//                 });
//                 //     .then(() => {
//                 // //再次尝试修改 这里应该不允许会报错
//                 // return PromiseA.mapSeries(recharges, recharge => {
//                 //     return constctor.updateCustomerRecharge(client, recharge.id);
//                 // })
//             });
//         }).then(() => {
//             // 发起一次微博充值
//             client.authenticate(oauth.operator.id);
//             // 创建一个微博申请
//             return constctor.creeateWeiboRecharge(client, oauth.operator.userId).then(([weiboRecharge]) => {
//                 // 会计审核
//                 // 第一次确认 BkPmwK9ZeZ
//                 return client.weiboRecharge.handle(weiboRecharge.id, {data: {status: 'handle', remarks: '合适确认说明'}});
//                 // 关闭
//                 // client.customerRecharge.handler('HJ_Xcei-gZ',{data:{status:'close',remarks:'关闭1',rejectReason:'关闭原因'}}).then(res => {
//                 //     console.log(res);
//                 // });
//             });
//         }).then(() => {
//             client.authenticate(oauth.operator.id);
//             // 微博消耗
//             return constctor.createMaterials(client, oauth.operator.userId);
//         }).then(() => {
//             client.authenticate(oauth.operator.id);
//             // 创建销售计划
//             return constctor.createPlans(client);
//
//         });
//
//     // });
// });

// 一条龙服务
client.account.login(users[0]).then(res => {
    let oauth = {admin: res};
    client.authenticate(oauth.admin.id);
    return client.department.findOne({
        filter: {
            where: {name: "销售部"},
            include: {relation: 'departmentMembers', scope: {where: {enabled: true}}}
        }
    }).then((department) => {
        const departmentMembers = department.departmentMembers;
        return PromiseA.mapSeries(departmentMembers, departmentMember => {
            return constctor.createCustomers(client, departmentMember.id);
        });
    }).then(() => {
        return client.department.findOne({
            filter: {
                where: {name: "运营部"},
                include: {relation: 'departmentMembers', scope: {where: {enabled: true}}}
            }
        }).then((department) => {
            const departmentMembers = department.departmentMembers;
            return client.weibo.find().then(weibos => {
                return PromiseA.mapSeries(departmentMembers, departmentMember => {
                    return constctor.creeateWeiboRecharge11(client, departmentMember.id, weibos);
                });
            });

        });
    });
});
